As an increasing number of applications, services, devices, and other such components are being made available as shared resources, either locally, across a local area network (LAN), or remotely over networks such as the Internet, an increasing number of content, application, and/or service providers are turning to technologies such as cloud computing and virtualization. Cloud computing, for example, is an approach to providing access to electronic resources through services, such as Web services, where the hardware and/or software used to support those services is dynamically scalable to meet the needs of the services at any given time. A user or customer in such an environment typically will rent, lease, or otherwise pay for access to resources, and thus does not have to purchase and maintain the hardware and/or software to provide access to these resources.
When a user or client requests access to a resource in such an environment, a provider of the access typically will have to make certain resource guarantees to the user. In many cases a resource, such as a storage disk or processor, will be shared among multiple users. Each user can be allocated a specific portion of that resource, such as an amount of processing capacity or rate of input/output (I/O) operations. Because the resource is shared among multiple users, however, there is the potential of abuse by one of those users which can negatively impact access by the other users sharing that resource. Approaches such as long term learning and throttling by throughput control, for example, provided results that fell short of isolating users on dynamic and large scale systems.